|
Date : 29 d�cembre 1993 et 08/02/94 Programme : GENEALOGIE Protection : CLEF PHYSIQUE Outils : SOFT-ICE V2.50 Temps pass� : 5 minutes Fichier : GENEATIQ.OVR Soci�t� : FRANCOIS LERECOURT Divers : Routine de la clef crypt�e Origine : Slave/D.C. Num�ro : 235 En effet la routine de test du dongle est crypt�e et comporte des routines anti-debug. Je m'explique: Je commence toujours par faire un point d'arret sur la lecture du port parallele en 2F9: BPIO 2F9 R. C'est la qu'on lit la pr�sence de la clef. Soft-ice apparait bien, mais apr�s un RET ou deux on commence � sauter au milieu d'autres instructions, puis en fin de compte on est en train de tracer du code en plein dans les interruptions. En principe le processeur ne met pas longtemps pour crier au scandale. Et SOFT-ICE lui aussi refuse de continuer en pr�textant le passage en mode prot�g�. Il existe une autre approche qui consiste � se placer au niveau de l'affichage du message et de voir d'o� on est venu. Car le programme est en clair et seule la routine de la clef est crypt�e. Ce qui signifie que la routine a �t� incluse par la suite et ne fait pas parti du soft. On en d�duit que le test final de la pr�sence de la clef est en clair. Lors de l'affichage on appelle SOFT-ICE et on fait un G @SS:SP. Pourquoi un G @SS:SP ? Parce-que si l'on fait du desassemblage arri�re on fini toujours par tomber sur un RET ou RETF ce qui vous fait ressembler au cabot qui sniffe du poivre sur la piste de sa proie. En clair le seul moyen de savoir d'o� l'on est venu c'est ce fameux G @SS:SP. Car au moment de l'appel d'un CALL ou CALLF le point de retour CS:IP est shift� sur la pile SS:SP. En fait avant de faire cela on note une chose int�ressante: En dumpant la pile on y trouve les caract�res du message d'affichage ! Ceci signifie simplement que l'auteur a voulu camoufler le message dans la pile. Un dernier sursaut avant de basculer dans ma liste maudite ? Lorsque l'on veut savoir d'ou l'on vient il y a �videmment la solution du backtrace. Mais ce n'est useful que si l'on se trouve 50000 instructions du lieu du crime. Dans le cas pr�sent on peut supposer que l'affichage fait parti d'un CALLF se trouvant en amont. Et qu'un test d�cide si oui ou non apr�s avoir achet� le soft on a bien mis le dongle dans le connecteur du port parall�le. En tapant G @SS:SP on s'arr�tera automatiquement sur l'adresse de retour du CALLF. C'est ce que l'on cherche pour pouvoir faire du desassemblage arri�re. Apr�s avoir tap� G @SS:SP on trouve CS:2A8B. Juste au-dessus se trouve le CALLF dont on vient, et qui affiche probablement le message. On remonte pour trouver un saut. Il y en a un en: CS:2978. CS=560B CS:2978 837EED00 CMP WORD [BP-13],00 CS:297C 7403 JZ 2981 ; PAS DE CLEF.... ON AFFICHE. CS:297E E91401 JMP 2A95 ; OK Avec PCTOOLS chercher dans le fichier GENEATIQ.OVR la chaine: 837EED007403 et modifier 7403 par 9090 ou EB00. ( NOP ou JMP 0 ) PS: Il faut esp�rer que parmis les autres CALLF se trouvant dans la partie de code que l'on strappe en for�ant le saut, se trouve �galement le flag qui switche le programme en mode 50 enregistrements ! Je n'ai pas eu la patience de v�rifier... 08/02/94 Ou je re�ois � nouveau ce programme avec la mention: la d�protection 50 fiches ne fonctionne pas. En fait en sniffant par-ci par-l� en tentant de cr�er une cinquante et uni�me fiche je trouve deux choses: Une, la position o� est sauvegard� le nombre de fiche DS:82DA qui est �gale au maximum � 32h ( 50 ). Et d'autre part toujours dans le fichier g�n�atique OVR le CALL qui affiche "Enregistrements limit�s � 50 fiches" avec le saut qu'il faut forcer. J'ai essay� de r�ecrire 0 dans la position DS:82DA et on peut effectivement y rajouter des enregistrements � ce moment l�. Malheureusement lors de la sauvegarde le nombre en DS:82DA repr�sente le nombre d'enregistrements r�els pr�sent dans le fichier. Donc en mettant un chiffre inf�rieur � 50 on sera toujours coinc�. Il suffit en fait de strapper le test du 50 et le CALL associ�. CS=5574 CS:35EB 833EDA8232 CMP WORD PTR [82DA],+32 ��< CS:35F0 7E08 JLE 35FA ; A FORCER PAR EB08 � CS:35F2 0E PUSH CS � CS:35F3 E814EC CALL 220A ; CALL D'AFFICHAGE... � CS:35F6 C646C801 MOV BYTE PTR [BP-38],01 ��> CS:35FA 833E8E8400 CMP WORD PTR [848E],+00 Dans GENEATIQUE.OVR chercher la chaine: 7E080EE8 et modifier 7E par EB. Freddy |